【RDB】プライマリーキー(主キー) - データを一意に識別するカラム

【RDB】プライマリーキー(主キー) - データを一意に識別するカラム

RDBのレコードを一意に識別できるカラムをプライマリーキーと呼びます。

ここではプライマリーキーについて解説します。

プライマリーキー

プライマリーキーは“レコードを一意に識別するカラムの集合”のことです。

関係スキーマなどの主キーと同義で、複数カラムにより構成する場合は複合キーと呼びます。

プライマリーキーのフィールドは重複せず、固有の値を格納します。

同じテーブルに“レコードを一意に識別するカラムの集合”が複数ある場合は、最も適したモノをプライマリーキーとします。

一般的にはIDや連番のように重複しない特性を持つカラムをプライマリーキーとすることが多くあります。

具体例

プライマリーキーを具体例で確認しましょう。

次のユーザーテーブルのプライマリーキーを決める場合、どのようになるでしょうか。

例 ユーザー
名前 生年月日 性別
田中 太郎 20XX年01月01日
佐藤 一葉 20XX年04月07日
高橋 二海 20XX年08月15日
鈴木 次郎 20XX年12月31日
田中 太郎 20XX年09月09日

結論としては、いずれのカラムもレコードを識別することができないため、IDカラムを追加することになります。

プライマリーキーは、そのカラムのフィールドによって1レコードだけに絞り込める(識別できる)必要があります。

各カラムを1つずつ確認しましょう。

名前

名前カラムはレコードを一意に識別できません。

例えば、このカラムのフィールドが田中 太郎であるレコードは2つあります。

名前カラムが『田中 太郎』のレコード
田中 太郎 20XX年01月01日
田中 太郎 20XX年09月09日

生年月日

生年月日カラムはレコードを一意に識別できないことが想定されます。

上記レコードでは重複はありませんが、現実的に考えると同じ生年月日の人は存在します。

生年月日カラムが重複するケース
佐々木 三久 20XX年01月01日

このような重複する可能性があるレコードが後を追加する可能性があるため、このカラムはプライマリーキーに適していません。

性別

性別カラムもレコードを一意に識別できません。

は3レコード、は2レコードあり、一意に識別することが不可能です。

性別カラムが『男』のレコード
田中 太郎 20XX年01月01日
鈴木 次郎 20XX年12月31日
田中 太郎 20XX年09月09日
性別カラムが『女』のレコード
佐藤 一葉 20XX年04月07日
高橋 二海 20XX年08月15日



以上のようにいずれのカラムもプライマリーキーには適しておらず、このテーブルではレコードを識別する方法がありません。

そのため、プライマリーキーを設定するためのカラムとしてIDカラムを追加します。

例 ユーザー(IDカラム追加)
ID 名前 生年月日 性別
0001 田中 太郎 20XX年01月01日
0002 佐藤 一葉 20XX年04月07日
0003 高橋 二海 20XX年08月15日
0004 鈴木 次郎 20XX年12月31日
0005 田中 太郎 20XX年09月09日

IDカラムのフィールドはデータ管理者またはシステム等が任意に決められる値とします。

重複しないようにIDを割り振ることで、レコードを一意に識別することが可能です。

このようにプライマリーキーは一意の値であり、レコードを識別するために使用します。